/*
 * resultset_sqlite.hpp
 *
 *  Created on: 2022年11月7日
 *      Author: dylan
 */

#ifndef _DM_OS_DB_RESULTSET_SQLITE_HPP_
#define _DM_OS_DB_RESULTSET_SQLITE_HPP_

#include <os/db/resultset.hpp>
#include <sqlite3.h>
#include <cstring>
namespace iotplat {
    class CDbSqlite;

/**
 * SQLITE3结果集
 */
    class CResultSetSqlite : public CResultSet {
        CResultSetSqlite(const CResultSetSqlite &);

        CResultSetSqlite &operator=(const CResultSetSqlite &);

    public:
        CResultSetSqlite();

        ~CResultSetSqlite();

        int size() const;

        bool next();

        void reset();

        bool asBool(int col) const;

        bool asBool(const char *col) const;

        int asInt(int col) const;

        int asInt(const char *col) const;

        uint asUint(int col) const;

        uint asUint(const char *col) const;

        double asDouble(int col) const;

        double asDouble(const char *col) const;

        std::string asString(int col) const;

        std::string asString(const char *col) const;

        bool isNull(int col) const;

        bool isNull(const char *col) const;

        int64_t asInt64(int col) const;

        int64_t asInt64(const char *col) const;

        int columnSize() const;

        std::string valueString(int col) const;

        std::string valueString(const char *col) const;

        void free();

    private:
        sqlite3_stmt *m_stmt;
        int m_size;

        friend CDbSqlite;
    };
}



#endif /* _DM_OS_DB_RESULTSET_SQLITE_HPP_ */
